{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#input data\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第一轮参数调整得到的n_estimators最优值（261），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:747: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59930, std: 0.00290, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.59957, std: 0.00295, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.59950, std: 0.00322, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58808, std: 0.00428, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58892, std: 0.00402, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58844, std: 0.00341, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.59105, std: 0.00305, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.59034, std: 0.00361, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58981, std: 0.00391, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.60867, std: 0.00392, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.60332, std: 0.00536, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59881, std: 0.00378, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.5880773269818923)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=261,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第一轮调参最优参数为'max_depth': 5, 'min_child_weight': 1， log_loss:0.588077"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588077 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x161dccac668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最优参数对应的max_depth = 5, min_child_weight = 1， log_loss = 0.58077"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二次调优(细调)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [0.5, 1, 1.5]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = [4,5,6]\n",
    "min_child_weight = [0.5,1,1.5]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:747: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59147, std: 0.00333, params: {'max_depth': 4, 'min_child_weight': 0.5},\n",
       "  mean: -0.59139, std: 0.00318, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.59202, std: 0.00368, params: {'max_depth': 4, 'min_child_weight': 1.5},\n",
       "  mean: -0.58826, std: 0.00417, params: {'max_depth': 5, 'min_child_weight': 0.5},\n",
       "  mean: -0.58808, std: 0.00428, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58836, std: 0.00452, params: {'max_depth': 5, 'min_child_weight': 1.5},\n",
       "  mean: -0.58941, std: 0.00332, params: {'max_depth': 6, 'min_child_weight': 0.5},\n",
       "  mean: -0.58947, std: 0.00313, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.58946, std: 0.00364, params: {'max_depth': 6, 'min_child_weight': 1.5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.5880773269818923)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=261,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "13:42-14:17"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588077 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n/DDDhw9v0b5NBaHa2lquv/56fv/737NixQp+8YtfpA12n/3sZ1m8eDGLFy9mypQpLapLJhl7x4Vx\n3r4D7CH6Pc5o4J/N7Kc5qZFzLqM7f/smK6p2tGqZwwd04/a/P6XJPNOmTWPNmjWMGTOG888/n759\n+/LUU09RXV3NFVdcwZ133slHH33EZz7zGSorK6mtreXf//3f2bBhA1VVVZxzzjn07t2bF154IWX5\nJSUlXH/99Tz//PP06NGD7373u/zrv/4r69at47777mPixInMnz+f6dOn87vf/Y477riDdevWsXbt\nWtatW8c///M/N9lK+vGPf8z06dORxKhRo/jJT34CwEsvvcS9997LBx98wD333MOkSZN45513uPTS\nS1m+fHmDMrZs2cLVV1/Npk2bGD9+PE117rrnnnsoLi7mhhtu4MYbb2TJkiXMmzePuXPn8thjj/HT\nn/6U2bNnc/vtt1NdXc3xxx/PY489RklJCWeffTbTp0+nvLycRx55hP/8z/9kwIABDB06lKKiIn7w\ngx+krfu0adN46623GDNmDJMnT+bGG2+sr9OCBQs44YQTOO644wC46qqrePbZZ1sc8A5VNrfjLggd\nEy4FKoETgZtyWivnXLtUUVHB8ccfz+LFizn//PNZtWoVCxYsYPHixSxatIiXXnqJ5557jgEDBrBk\nyRKWL1/ORRddxA033MCAAQN44YUX0gYggI8++oizzz6bRYsW0bVrV2677TbmzJnDr3/9a771rW+l\n3Oftt9/mD3/4AwsWLODOO+9k//7UY++9+eab3H333cybN48lS5bw/e9/v37b+vXrefnll/nd737H\ntGnTmjwHd955J3/3d3/HG2+8wcSJE1m3bl3avGeeeSZ//OMfgeg24q5du9i/fz8vv/wyEyZMYPPm\nzXznO9/h+eef5/XXX6e8vJx77723QRlVVVV8+9vf5tVXX2XOnDm8/fbbDbanqntFRQUTJkxg8eLF\n3HjjjVRVVXHJJZcA8P777zNo0KD6/cvKynj//fdT1v+ZZ55h1KhRTJo0iffee6/J89JS2fxOKPEr\npEuAX5jZVu+h41y8MrVY2sLs2bOZPXs2Y8eOBWDXrl2sWrWKCRMm8M1vfpObb76ZSy+9lAkTJmRd\nZqdOnbjooosAGDlyJEVFRRQWFjJy5EjeeeedlPt86lOfoqioiKKiIvr27cuGDRsoKys7KN+8efOY\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x161dce00b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最优参数没有变化，对应的max_depth = 5, min_child_weight = 1， log_loss = 0.588077"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
